[Mobile Hacking 10] 안드로이드 콘텐츠 프로바이더 취약점

[Mobile Hacking 10] 안드로이드 콘텐츠 프로바이더 취약점

Lecture
Security
태그
mobile hacking
security
public
완성
Y
생성일
Mar 18, 2024 05:34 AM
LectureName
Mobile Hacking (Android- checklist)

1. 안전하지 않은 콘텐츠 프로바이더 접근


1.1 콘텐츠 프로바이더

개념
안드로이드의 모든 어플리케이션은 다른 어플리케이션에게 자신의 데이터를 제공하는 것을 기본적으로 금지합니다. 하지만 컨텐츠 프로바이더를 이용하여 자신의 데이터에 다른 어플리케이션이 접근하거나, 부여된 권한대로 이용하게 할 수 있습니다.
 
컨텐츠 프로바이더 제공 방법
  1. 컨텐츠 프로바이더 제공
  • ContentProvider 컴포넌트를 생성, 제공될 데이터 작성
  • AndroidManifest 파일에 해당 프로바이더 정의
 
  1. 컨텐트 리졸버를 통한접근
  • 컨텐트 리졸버가 프로바이더한테 content:// 형식으로 데이터 요청
  • 요청된 데이터를 프로바이더가 제공
 
 

1.2 취약점 개요

공격자가 제공된 프로바이더에서 민감한 데이터에 접근하여 저장된 데이터를 마음대로 조회하거나 변경, 삭제할 수 있는 취약점입니다.
 
 

1.3 취약점 탐색

  1. 대상 어플리케이션에서 Androidmanifest.xml에 content provider 이 선언되어 있는지 확인합니다.
  1. adb등을 이용하여 해당 콘텐츠 프로바이더가 exported=true 로 되어있는지 확인합니다.
  1. 안전하지 않은 데이터의 저장, SQL Injection등 취약점을 탐지합니다.
 
 
 

2. 실습


2.1 인시큐어뱅크 콘텐츠 프로바이더

해당 실습에서는 인시큐어뱅크 어플리케이션에서 발생하는 취약한 ContentProvider로 실습을 할 예정입니다.
androidmanifest.xml
notion image
  • TrackUserContentProvider 이라는 ContentProvider이 존재합니다.
  • exported="true" 로 되어 있기 때문에 외부에서 접근이 가능합니다.
 
TrackUserContentProvider
notion image
  • 해당 ContentProvider 코드를 보면 Content로 접근할 수 있는 Uri가 존재합니다.
  • 추가적으로 하단에 있는 코드를 보면 db는 mydb 로 추정할 수 있습니다.
 
 

2.2 Content 조회

notion image
  • adb를 이용하여 uri로 데이터를 조회하게 되면, 로그인한 사용자의 id가 노출되게 됩니다.
  • 이처럼 사용자의 민감정보가 조회가 가능한 취약점이 존재합니다.
 
 

2.3 Drozer을 이용한 취약점 점검

# 취약점 스캔 dz> run app.pakage.attacksurface <pakage> # 콘텐츠 프로바이더 정보 확인 (권한, 프로바이더 클래스명) dz> run.app.provider.info a <pakage> # 콘텐츠 프로바이더 uri 정보 검색 dz> run.scanner.provider.finduris -a <pakage> # 콘텐츠 프로바이더를 이용한 데이터 확인 dz> run.app.provider.query <Uri> # SQL Injection 확인 (에러 유발) dz> run app.provider.query <Uri> --projection "'" # Master 테이블 가져오기 dz> run.app.provider.query <Uri> --projection " * from SQLITE_MASTER where type='table';--"
 
 
 

3. 대응방안


  • 콘텐츠 프로바이더를 선언할 때는 적절한 권한과 함께 선언되어야 합니다.
  • 보안 상 되도록 androidmanifest.xml에서 exported=false 로 선언하여야 합니다.